/**
 *Copyright (c) 2024 watereyes
 * workflow is licensed under Mulan PubL v2.
 * You can use this software according to the terms and conditions of the Mulan
 * PubL v2.
 * You may obtain a copy of Mulan PubL v2 at:
 *          http://license.coscl.org.cn/MulanPubL-2.0
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PubL v2 for more details.
 */
package com.koron.workflow.api.service;

import org.koron.ebs.mybatis.SessionFactory;
import org.swan.bean.MessageBean;

import com.koron.workflow.api.bean.query.ProcessCommitQueryBean;
import com.koron.workflow.api.bean.query.ProcessListQueryBean;
import com.koron.workflow.api.bean.query.ProcessStartQueryBean;

/**
 * 流程对外接口处理
 * @author bin
 *
 */
public interface WorkflowService {
	/**
	 * 驳回操作
	 */
	int OPERATION_REJECT = 1;
	/**
	 * 转办
	 */
	int OPERATION_TRANSFER = 2;
	/**
	 * 沟通
 	 */
	int OPERATION_COMMUNICATE = 4;
	/**
	 * 催办
 	 */
	int OPERATION_ALRAM = 8;
	/**
	 * 挂起
	 */
	int OPERATION_SUSPEND = 16;
	/**
	 * 通过
	 */
	int OPERATION_AGREE = 32;
	/**
	 * 沟通回复
	 */
	int OPERATION_REPLY = 64;
	/**
	 * 取消沟通
	 */
	int OPERATION_CANCLE_COMMUNICATE = 128;
	/**
	 * 撤回
	 */
	int OPERATION_RECALL = 256;
	
	/**
	 * 新建工作流
	 * @param factory 数据库连接
	 * @param param 新建工作流所需要参数
	 * @return
	 */
	MessageBean<?> start(SessionFactory factory, ProcessStartQueryBean param);
	
	/**
	 * 工作流办理接口
	 * @param factory 数据库连接
	 * @param param 提交所需参数
	 * @return
	 */
	MessageBean<?> submit(SessionFactory factory, ProcessCommitQueryBean param);
	
	/**
	 * 获取工作流操作界面 一串html 代码
	 * @param billId 单据主键
	 * @param operator 操作人登陆帐号
	 * @return
	 */
	MessageBean<?> view(SessionFactory factory, String taskId, String processInstanceId, String billId, String operator, String setCode, String processCode);
	
	/**
	 * 工作流历史轨迹
	 * @param setCode 流程组编号 
	 * @param processCode 工作流模板编号(不同组可重名)
	 * @param billId 单据主键
	 * @return
	 */
	MessageBean<?> history(SessionFactory factory, String setCode, String processCode, String billId);
	
	/**
	 * 工作流列表
	 * @param param
	 * @return
	 */
	MessageBean<?> list(SessionFactory factory, ProcessListQueryBean param);
	
	/**
	 * 工作流模板定义信息
	 * @param setCode 流程组编号
	 * @param processCode 工作流模板编号(不同组可重名)
	 * @return
	 */
	MessageBean<?> define(SessionFactory factory, String setCode, String processCode);
	
	/**
	 * 初始化流程 删除当前单据所有的流程相关信息
	 * @param processInstanceId 流程实例ID
	 * @return
	 */
	MessageBean<?> deleteProcess(String processInstanceId);

	/**
	 * 流程挂起
	 * @param processInstanceId
	 * @return
	 */
	MessageBean<?> suspend(String processInstanceId);
	
	/**
	 * 流程由挂起状态恢复到执行状态
	 * @param processInstanceId
	 * @return
	 */
	MessageBean<?> recovery(String processInstanceId);
}
